iT邦幫忙

2025 iThome 鐵人賽

0
DevOps

Mac 環境 n8n 30 天學習計畫系列 第 28

Day 28|實作 Part 2:資料處理(AI / Function)

  • 分享至 

  • xImage
  •  

🎯 專案主題回顧

🧠 學生日程自動提醒
Google Calendar → n8n → Function / AI → Email / Line Notify

今天要完成的就是 中間那段「資料處理」
讓輸出的內容變成「人類可讀、可寄出的訊息」。


🪄 一、今日任務地圖

步驟 任務 成功標準
1️⃣ 取得 Google Calendar JSON(從前一天) 能執行到 Calendar Node
2️⃣ 用 Function Node 處理資料 轉成文字清單格式
3️⃣ (選配)AI Node 美化摘要內容 生成自然語句訊息
4️⃣ 用 Set Node 輸出乾淨訊息 為通知步驟準備好資料
5️⃣ 寫下中間成果心得 說明處理邏輯與遇到問題

🧩 二、實作步驟詳細說明

Step 1️⃣|準備 Google Calendar Node 輸出

確保昨天 workflow 有成功執行:

[
  {
    "summary": "期中報告準備",
    "start": { "dateTime": "2025-10-27T09:00:00+08:00" },
    "end": { "dateTime": "2025-10-27T10:00:00+08:00" },
    "description": "與同學討論報告方向"
  },
  {
    "summary": "體育課",
    "start": { "dateTime": "2025-10-27T13:00:00+08:00" },
    "end": { "dateTime": "2025-10-27T15:00:00+08:00" },
    "description": ""
  }
]

Step 2️⃣|建立 Function Node 處理資料

  1. 新增節點 → 搜尋 Function
  2. 在 Function Node 內輸入以下程式碼👇
// 取得上一個節點(Google Calendar)的輸出
const events = $json;

// 檢查是否有資料
if (!Array.isArray(events) || events.length === 0) {
  return [{ json: { message: "📭 今日沒有行程。" } }];
}

// 格式化每個事件
const messageList = events.map((event, index) => {
  const start = new Date(event.start.dateTime).toLocaleTimeString('zh-TW', { hour: '2-digit', minute: '2-digit' });
  const end = new Date(event.end.dateTime).toLocaleTimeString('zh-TW', { hour: '2-digit', minute: '2-digit' });
  const title = event.summary || "未命名活動";
  const description = event.description ? `(${event.description})` : "";
  return `${index + 1}. ${title}:${start} ~ ${end} ${description}`;
});

// 組合成完整訊息
const finalMessage = `📅 今日行程提醒\n---------------------\n${messageList.join('\n')}`;

return [{
  json: {
    message: finalMessage
  }
}];

執行結果(範例)

{
  "message": "📅 今日行程提醒
---------------------
1. 期中報告準備:09:00 ~ 10:00(與同學討論報告方向)
2. 體育課:13:00 ~ 15:00"
}

Step 3️⃣|(選配)AI Node 美化語句(使用 Hugging Face 免費模型)

  1. 在 Function Node 後新增 HTTP Request Node

  2. 設定如下:

    • Method:POST

    • URL:https://api-inference.huggingface.co/models/facebook/bart-large-cnn

    • Headers:

      Authorization: Bearer hf_你的HuggingFace_API_KEY
      Content-Type: application/json
      
    • Body:

      {
        "inputs": "請幫我將以下行程文字轉成簡潔自然的每日提醒訊息: {{$json["message"]}}"
      }
      
    • 選項:Response → JSON。

  3. 執行後你會看到模型回傳的摘要訊息,例如:

    {
      "summary_text": "早上9點有期中報告討論,下午1點上體育課。別忘了帶報告資料喔!"
    }
    

Step 4️⃣|用 Set Node 清理輸出

  1. 新增一個 Set Node,把最終輸出統一格式化:

    • 新增欄位 final_message

    • 內容使用 expression:

      {{$json["summary_text"] || $json["message"]}}
      
  2. 這樣不管有沒有使用 AI,都會輸出一個乾淨訊息,方便寄出。


上一篇
Day 27|實作 Part 1:收集資料(API / Webhook)與 Debug
下一篇
Day 29|實作 Part 3:通知
系列文
Mac 環境 n8n 30 天學習計畫30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言